<html>
<head>
  <title>Grails Runtime Exception</title>
  <style type="text/css">
  .message {
    border: 1px solid black;
    padding: 5px;
    background-color: #E9E9E9;
  }

  .stack {
    border: 1px solid black;
    padding: 5px;
    overflow: auto;
    height: 300px;
  }

  .snippet {
    padding: 5px;
    background-color: white;
    border: 1px solid black;
    margin: 3px;
    font-family: courier;
  }
  </style>
</head>

<body>
<h1>Grails Runtime Exception</h1>
<h2>Error Details</h2>

<div class="message" >
  <strong>Error ${request.'javax.servlet.error.status_code'}:</strong> ${request.'javax.servlet.error.message'.encodeAsHTML()}<br/>
  <strong>Servlet:</strong> ${request.'javax.servlet.error.servlet_name'}<br/>
  <strong>URI:</strong> ${request.'javax.servlet.error.request_uri'}<br/>
  <g:if test="${exception}">
    <strong>Exception Message:</strong> ${exception.message?.encodeAsHTML()} <br/>
    <strong>Caused by:</strong> ${exception.cause?.message?.encodeAsHTML()} <br/>
    <strong>Class:</strong> ${exception.className} <br/>
    <strong>At Line:</strong> [${exception.lineNumber}] <br/>
    <strong>Code Snippet:</strong><br/>
    <div class="snippet">
      <g:each var="cs" in="${exception.codeSnippet}">
        ${cs?.encodeAsHTML()}<br/>
      </g:each>
    </div>
  </g:if>
</div>
<g:if test="${exception}">
  <h2>Stack Trace</h2>
  <div class="stack">
    <pre><g:each in="${exception.stackTraceLines}">${it.encodeAsHTML()}<br/></g:each></pre>
  </div>
</g:if>
</body>
</html>